Zugriff auf ARRAY-Datentyp und ARRAY-Elemente

Falls Sie eine Variable basierend auf einem ARRAY-Datentyp deklarieren wollen (dadurch wird eine ARRAY-Variable deklariert), geben Sie den Namen des ARRAY-Datentyps (z.B. myType) als Datentyp in der Deklaration von Variablen ein. Als Alternative können Sie die ARRAY-Angabe direkt bei der Deklaration der Variable eingeben (auch dadurch wird eine ARRAY-Variable deklariert); siehe var2 und var3 im folgenden Beispiel.

Falls Sie eine ARRAY-Variable einer anderen ARRAY-Variable zuweisen wollen, müssen beide auf dem gleichen Datentyp mit dem gleichen Index-Unterbereich basieren. Bei einem STRING-Basisdatentyp muss auch die Länge übereinstimmen.
Falls Sie ein ARRAY-Element in Zuweisungen verwenden wollen, geben Sie den Namen der Variable oder des Funktionsbausteins (z.B. var1 oder TONArr1) und den ARRAY-Index (z.B. 2) in [] eingeschlossen (z.B. var1[2] oder TONArr1[30]) ein. Handelt es sich um ein ARRAY-Element mit mehreren Dimensionen, trennen Sie die ARRAY-Indexe durch das Zeichen ,, voneinander (z.B. var6[1,2]). Als Erweiterung zur →IEC-Norm ist es möglich, jeden der ARRAY-Index in []  hintereinander anzugeben (z.B. var6[1][2]).
Sie können ein ARRAY-Element einem anderen ARRAY-Element nur zuweisen, sofern beide auf den gleichen Datentypen basieren.

Als ARRAY-Index können Sie einen →Ausdruck eingeben, der einen Wert vom →Datentyp DINT liefert. Ein eingegebener ARRAY-Index muss Teil des Index-Unterbereichs sein. Falls Sie ARRAY-Indizes als →Konstante eingeben (z.B. var1[2]), werden ungültige ARRAY-Indizes automatisch von Neuron Power Engineer als Fehler gekennzeichnet.

Falls Sie→Variablen und/oder Operatoren für ARRAY-Indizes verwenden (z.B. var1[3+3]), werden diese Angaben bei der Eingabe im ST-Editor nicht auf ihre Gültigkeit geprüft. Der ARRAY-Index wird erst beim Ausführen der Anwendung berechnet. Falls der berechnete ARRAY-Index außerhalb des Index-Unterbereichs liegen, wird bei der Ausführung die überschrittene Grenze verwendet (also: x, falls ARRAY-Index < x, und y, falls ARRAY-Index > y). Außerdem wird der Ausgang ENO der umfassenden →POE auf den Wert FALSE (bzw. einer Entsprechung) gesetzt.

Neuron empfiehlt Ihnen, Code in Ihrer Anweisung (z.B. IF-Anweisungen) einzufügen, um ARRAY-Indizes außerhalb des Index-Unterbereichs zu erkennen.

Beispiele
VAR
  var1: myType;                            (* 'myType' has been declared as array data type:    'ARRAY [1..9] OF INT := [1, 2, 3]' *)
  var2: ARRAY [1..9] OF INT := [9(1)];
  var3: ARRAY [1..2] of BOOL := [2(TRUE)];
  var4: inputData;                         (* 'inputData' has been declared as array data type: 'ARRAY [0..1] OF BOOL := [2(TRUE)]' *)
  var5: ARRAY [1..2] of WORD;
  var6: ARRAY [1..2, 1..3] OF INT := [2([3(25)])];
  var7: ARRAY [1..2, 1..3, 1..4] OF INT := [2([3([4(15)])])];
END_VAR
 
  (* assignments: ARRAY variable to ARRAY variable *)
  var1     := var2;     (* OK, because 'var1' and 'var2' are based on the same data type and the same index subrange *)
  var5     := var3;     (* error, because 'var5' and 'var3' are not based on the same data type *)
  var3     := var4;     (* error, 'var3' and 'var4' are based on the same data type but not on the same index subrange *)
 
  (* assignments with array element *)
  var1[2]    := 5;        (* OK, because '5' is allowed for data type 'INT' *)
  var3[1]    := FALSE;    (* OK, because 'FALSE' is allowed for data type 'BOOL' *)
  var4[1]    := 5;        (* error, because '5' is not allowed for data type 'BOOL' *)
 
  var1[13]   := 5;        (* error, because subscript '13' is outside of the index subrange '1..9' *)
  var1[0]    := 5;        (* error, because subscript '0' is outside of the index subrange '1..9' *)
 
  var3[1]    := var4[1];  (* OK, because 'var3' and 'var4' are based on the same data type *)
  var3[1]    := var4[6];  (* error, because subscript '6' for 'var4' is outside of the index subrange '0..1' *)
  var1[2]    := var3[2];  (* error, because 'var1' is of type 'BOOL' and 'var3' of type 'INT'. 'BOOL' cannot be converted implicitly to 'INT'. *)
  var5[1]    := var3[1];  (* OK, because 'var3' is of type 'BOOL' and 'var5' of type 'WORD'. 'BOOL' can be converted implicitly to 'WORD'. *)
 
  var1[3+3]  := 5;        (* Input is possible, execution is OK. Reason: '3+3' produces the valid subscript '6'. *)
                          (* Recommended: Insert additional code that checks whether an invalid subscript might result. *)
  var1[4*3]  := 5;        (* Input is possible, but execution is done by using 'var1[9]' (instead of 'var1[12]'). Reason: '4*3' produces the invalid subscript '12'. *)
                          (* Moreover, 'ENO' of the embracing POU is set to 'FALSE' during the execution. *)
                          (* Recommended: Insert additional code that checks whether an invalid subscript might result. *)
 
  (* Assignment to an array element with 2 dimensions *)
  var6[1,2]    := 5;        (* assigning '5' to the element 'var6[1,2]' *)
  var6[2][1]   := 5;        (* assigning '10' to the element 'var6[2,1]' *) 
 
  (* Assignment to an array element with 3 dimensions *)
  var7[1,2,3]  := 5;        (* assigning '5' to the element 'var7[1,2,3]' *)
  var7[2][1][4] := 5;       (* assigning '10' to the element 'var7[2,1,4]' *)
 
  (* The assignments to an array element with 4 dimensions are similar to the assignments to an array element with 3 dimensions. *)

Anzeige für ARRAY-Variablen

Die Anzeige für ARRAY-Variable ist auf den Basis-Typ in der Sicht Instanzen beschränkt. Falls Sie ARRAY-Elemente in die Sicht Variablenwerte einfügen wollen (um dort deren Werte zu beobachten/testen), diese aber nicht in der Sicht Instanzen verfügbar sind, ziehen Sie einfach den Basis-Typ in die Sicht Variablenwerte und bearbeiten Sie den eingefügten Eintrag (vervollständigen Sie ihn um den benötigten ARRAY-Index).